home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 May: Tool Chest / Developer CD Series Tool Chest (Apple Computer)(May 1999).iso / Tool Chest / Games / Game Sample Code / ZAM 1.0a13 / GameSource / MissileAEvents.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-09-16  |  5.2 KB  |  225 lines  |  [TEXT/KAHL]

  1. #include "GameAEvents.h"
  2. #include "ZAM.h"
  3. #include "WindowDispatch.h"
  4. #include "TankSprite.h"
  5. #include "MissileSprite.h"
  6.  
  7. #include "MissileAEvents.proto.h"
  8.  
  9. void InstallMissileEvents(gamePtr game)
  10. {
  11.     OSErr    err;
  12.     
  13.     err = AEInstallEventHandler (kZAMEventClass, kFireMissileID, AEFireMissile,(long)game, false);
  14.     if(err) {
  15.         ErrMsgCode("\pCould not install AE handler.",err);
  16.         ExitToShell();
  17.     }
  18.     
  19.     err = AEInstallEventHandler (kZAMEventClass, kMoveRemoteMissileID, AEMoveRemoteMissile,(long)game, false);
  20.     if(err) {
  21.         ErrMsgCode("\pCould not install AE handler.",err);
  22.         ExitToShell();
  23.     }
  24. }    
  25.  
  26. pascal OSErr AEMoveRemoteMissile (AppleEvent *theAE, AppleEvent *reply, long rfCon)
  27. {
  28.     OSErr        err = 0;
  29.     long        len;
  30.     DescType    actualType;
  31.     gamePtr        game;
  32.     short        missileIndex;
  33.     fixPt        missileLoc;
  34.     
  35.     game = (gamePtr)rfCon;
  36.         
  37.     err = AEGetParamPtr(theAE, keyMissileNum, typeShortInteger, &actualType, 
  38.             &missileIndex, sizeof(short), &len);
  39.     if(err != noErr) {
  40.         ErrMsgCode("\p Failed: AEMoveRemoteMissile keyDir, typeShortInteger",err);
  41.     }
  42.     
  43.     if(err == noErr) {
  44.         err = AEGetParamPtr(theAE, keyLocation, typefixPt, &actualType, 
  45.                 &missileLoc, sizeof(short), &len);
  46.         if(err != noErr) {
  47.             ErrMsgCode("\p Failed: AEMoveRemoteMissile keyLocation, typefixPt",err);
  48.         }
  49.     }
  50.     
  51.     if(err == noErr) {
  52.         RemoteMissileSpriteList[missileIndex]->remoteLoc = missileLoc;
  53.         RemoteMissileSpriteList[missileIndex]->moveTask.taskFlag = true;
  54.     }
  55.     
  56.     return err;
  57.  
  58. }
  59.  
  60.  
  61. pascal OSErr AEFireMissile (AppleEvent *theAE, AppleEvent *reply, long rfCon)
  62. {
  63.  
  64.     fixPt        where;
  65.     long        len;
  66.     DescType    actualType;
  67.     short        direction;
  68.     short         missileNum;
  69.     gamePtr        game;
  70.     OSErr        err = 0;
  71.     
  72.     game = (gamePtr)rfCon;
  73.  
  74. #ifdef CHECK_STATE        
  75.     if(err == noErr) {
  76.         if ( game->gameState != kGameInProgress ) {
  77.             err = paramErr;
  78.             ErrMsgCode("\pError - missile event rcvd in wrong state",game->gameState);
  79.         }
  80.     }
  81. #endif
  82.     
  83.     if(err == noErr) {
  84.         /* get the direction of the missile */
  85.         err = AEGetParamPtr(theAE, keyMissileNum, typeShortInteger, &actualType, 
  86.                 &missileNum, sizeof(short), &len);
  87.         if(err != noErr) {
  88.             ErrMsgCode("\p Failed: AEFireMissile keyDir, typeShortInteger",err);
  89.         }
  90.     }
  91.  
  92.     if(err == noErr) {
  93.         /* get the direction of the missile */
  94.         err = AEGetParamPtr(theAE, keyDir, typeShortInteger, &actualType, 
  95.                 &direction, sizeof(short), &len);
  96.         if(err != noErr) {
  97.             ErrMsgCode("\p Failed: AEFireMissile keyDir, typeShortInteger",err);
  98.         }
  99.     }
  100.     
  101.     if(err == noErr) {
  102.         /* get the starting point of the missile */
  103.         err = AEGetParamPtr(theAE, keyLocation, typefixPt, &actualType, 
  104.                 &where, sizeof(fixPt), &len);
  105.         if(err != noErr) {
  106.             ErrMsgCode("\p Failed: AEFireMissile keyLocation, typePoint",err);
  107.         }
  108.     }
  109.  
  110.     if(err == noErr) {
  111.         FireMissile( direction, where.h, where.v, true, missileNum );
  112.     }
  113.     
  114. }
  115.  
  116.  
  117. void NetworkMoveMissile(short missileIndex)
  118. {
  119.     AppleEvent        missileMovedEvt;
  120.     AppleEvent        reply;
  121.     OSErr            err;
  122.     Boolean            disposeNeeded = false;
  123.  
  124. #ifdef NO_NET
  125.     return;
  126. #endif
  127.     
  128.     err = AECreateAppleEvent(kZAMEventClass, kMoveRemoteMissileID, &gGame->oppAddr,
  129.                  kAnyTransactionID, gGame->gameID, &missileMovedEvt);
  130.     if(err != noErr) {
  131.         ErrMsgCode("\p Failure: NetworkMoveTank AECreateAppleEvent",err);
  132.     }
  133.     
  134.     
  135.     if(err == noErr) {
  136.         disposeNeeded = true;
  137.         AEPutParamPtr(&missileMovedEvt, keyMissileNum, typeShortInteger, 
  138.                             &missileIndex, sizeof(short));
  139.         if(err != noErr) {
  140.             ErrMsgCode("\p Failure: AEPutParamPtr",err);
  141.         }
  142.     }
  143.     
  144.     if(err == noErr) {
  145.         AEPutParamPtr(&missileMovedEvt, keyLocation, typefixPt, 
  146.                             &MissileSpriteList[missileIndex]->loc, sizeof(fixPt));
  147.         if(err != noErr) {
  148.             ErrMsgCode("\p Failure: AEPutParamPtr",err);
  149.         }
  150.     }
  151.     
  152.     if(err == noErr) {
  153.         err = AESend(&missileMovedEvt, &reply, kAENoReply + kAECanInteract,
  154.                  kAENormalPriority, 
  155.                  60 * 60, nil, nil);
  156.         if(err != noErr) {
  157.             ErrMsgCode("\p NetworkMoveMissile: AESend missileMovedEvt",err);
  158.         }
  159.     }
  160.  
  161.     if(disposeNeeded) {
  162.         AEDisposeDesc(&NetworkMoveMissile);
  163.     }
  164.  
  165. }
  166.  
  167.  
  168. void NetworkFireMissile(gamePtr game, short dir, Fixed h, Fixed v, short missileNum)
  169. {
  170.  
  171.     OSErr            err;
  172.     AppleEvent        fireMissileEvent;
  173.     AppleEvent        reply;
  174.     Boolean            disposeNeeded = false;
  175.     fixPt            where;
  176.     
  177. #ifdef NO_NET
  178.     return;
  179. #endif
  180.  
  181.     err = AECreateAppleEvent(kZAMEventClass, kFireMissileID, &game->oppAddr,
  182.                  kAnyTransactionID, game->gameID, &fireMissileEvent);
  183.     if(err != noErr) {
  184.         ErrMsgCode("\p Failure: FireNetworkMissile AECreateAppleEvent",err);
  185.     }
  186.     
  187.     if(err == noErr) {
  188.         disposeNeeded = true;
  189.         err = AEPutParamPtr(&fireMissileEvent, keyMissileNum, typeShortInteger, 
  190.                             &missileNum, sizeof(short));
  191.         if(err != noErr) {
  192.             ErrMsgCode("\p Failure: AEPutParamPtr",err);
  193.         }
  194.     }
  195.  
  196.     if(err == noErr) {
  197.         err = AEPutParamPtr(&fireMissileEvent, keyDir, typeShortInteger, 
  198.                             &dir, sizeof(short));
  199.         if(err != noErr) {
  200.             ErrMsgCode("\p Failure: AEPutParamPtr",err);
  201.         }
  202.     }
  203.     
  204.     if(err == noErr) {
  205.         where.h = h;
  206.         where.v = v;
  207.         err = AEPutParamPtr(&fireMissileEvent, keyLocation, typefixPt, 
  208.                             &where, sizeof(fixPt) );
  209.         if(err != noErr) {
  210.             ErrMsgCode("\p Failure: AEPutParamPtr",err);
  211.         }
  212.     }
  213.     
  214.     if(err == noErr) {
  215.         err = AESend(&fireMissileEvent, &reply, kAENoReply + kAECanInteract,
  216.                  kAENormalPriority, 
  217.                  60 * 60, nil, nil);
  218.         if(err != noErr) {
  219.             ErrMsgCode("\p Failure: AESend",err);
  220.         }
  221.     }
  222.         
  223.     if(disposeNeeded)
  224.         AEDisposeDesc(&fireMissileEvent);
  225. }